package com.atguigu.spzx.manager.helper;

import com.atguigu.spzx.model.entity.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * 用于构建菜单树结构
 */
public class MenuHelper {


    /**
     * 构建菜单树结构
     * @param sysMenuList 菜单列表
     * @return 集合中存储所有父菜单对象，每个父菜单孩子菜单都存储在children属性集合里。
     */
    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
        List<SysMenu> sysMenuParentList = new ArrayList<>(); //存放所有的父菜单

        for (SysMenu sysMenu : sysMenuList) {
            if(sysMenu.getParentId().intValue() == 0){ //当前菜单的parent_id=0，那么当前菜单就是父菜单
                sysMenuParentList.add(findChildren(sysMenu,sysMenuList));
            }
        }

        return sysMenuParentList;
    }

    /**
     * 递归：
     *      1.一定存在递推关系
     *      2.基本情况
     * @param sysMenu 父菜单
     * @param sysMenuList 所有菜单列表集合
     * @return 父菜单
     */
    private static SysMenu findChildren(SysMenu sysMenuParent, List<SysMenu> sysMenuList) {
        sysMenuParent.setChildren(new ArrayList<>()); //对children集合属性初始化。
        for (SysMenu menu : sysMenuList) {
            if(menu.getParentId().intValue() == sysMenuParent.getId()){ //找孩子过程
                sysMenuParent.getChildren().add(findChildren(menu,sysMenuList)); //递归找孩子
            }
        }
        return sysMenuParent;
    }


}
